/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.uoc.tds.cliente;

import edu.uoc.tds.bean.CentroDocente;
import edu.uoc.tds.common.MostrarCombo;
import edu.uoc.tds.common.RemotoInterface;
import edu.uoc.tds.common.UtilLenguaje;
import edu.uoc.tds.common.Utils;
import java.awt.Rectangle;
import java.rmi.RemoteException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

public class PantallaAltaCentroDocente extends javax.swing.JPanel {

    private RemotoInterface objServeis = null;
    private static final long serialVersionUID = 1L;
    private JComboBox comboUniversidad = null;
    private JComboBox comboPais = null;
    private JButton botonAceptar = null;
    private JTextField nombre = null;
    private JTextField direccion = null;
    private JTextField email = null;
    private JTextField web = null;
    private JTextField CP = null;
    private JTextField telefono = null;
    private JTextField localidad = null;
    private UtilLenguaje txt = null;
    private JLabel labelNombre = null;
    private JLabel labelUniversidad = null;
    private JLabel labelLocalidad = null;
    private JLabel labelWeb = null;
    private JLabel labelEmail = null;
    private JLabel labelTelefono = null;
    private JLabel labelPais = null;
    private JLabel labelDireccion = null;
    private JLabel labelCP = null;
    private JLabel labelMotivo = null;
    private JLabel labelFechaBaja = null;
    private JTextField motivo = null;
    private JTextField fechaBaja = null;
    private Boolean bAlta = null;
    private Integer idCentroEditar = null;
    private CentroDocente centroEditar = null;
    private Integer estado=0;
    private DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

    public PantallaAltaCentroDocente(RemotoInterface pObjServeis, Boolean alta, Integer idCentro) throws RemoteException {
        super();
        objServeis = pObjServeis;
        bAlta = alta;
        idCentroEditar = idCentro;
        initComponents();

    }

    private void initComponents() {

        this.setLayout(null);
        this.setBounds(new Rectangle(0, 0, 1000, 500));
        this.add(getComboUniversidad(), null);
        this.add(getComboPais(), null);
        this.add(getBotonAceptar(), null);

        labelPais = new JLabel();
        labelPais.setBounds(new Rectangle(10, 130, 100, 20));
        labelPais.setText(txt.getMessage("pantAltaCentro.label.pais"));
        this.add(labelPais);

        labelNombre = new JLabel();
        labelNombre.setBounds(new Rectangle(10, 40, 100, 20));
        labelNombre.setText(txt.getMessage("pantAltaCentro.label.nombre"));
        this.add(labelNombre);

        nombre = new JTextField(10);
        nombre.setBounds(new Rectangle(100, 40, 250, 25));
        this.add(nombre);

        labelDireccion = new JLabel();
        labelDireccion.setBounds(new Rectangle(10, 70, 250, 20));
        labelDireccion.setText(txt.getMessage("pantAltaCentro.label.direccion"));
        this.add(labelDireccion);

        direccion = new JTextField(10);
        direccion.setBounds(new Rectangle(100, 70, 250, 25));
        this.add(direccion);


        labelLocalidad = new JLabel();
        labelLocalidad.setBounds(new Rectangle(10, 100, 100, 20));
        labelLocalidad.setText(txt.getMessage("pantAltaCentro.label.localidad"));
        this.add(labelLocalidad);

        localidad = new JTextField(10);
        localidad.setBounds(new Rectangle(100, 100, 200, 25));
        this.add(localidad);


        labelCP = new JLabel();
        labelCP.setBounds(new Rectangle(350, 100, 25, 25));
        labelCP.setText(txt.getMessage("pantAltaCentro.label.CP"));
        this.add(labelCP);

        CP = new JTextField(10);
        CP.setBounds(new Rectangle(420, 100, 150, 25));
        this.add(CP);


        labelEmail = new JLabel();
        labelEmail.setBounds(new Rectangle(350, 160, 100, 20));
        labelEmail.setText(txt.getMessage("pantAltaCentro.label.email"));
        this.add(labelEmail);

        email = new JTextField(10);
        email.setBounds(new Rectangle(420, 160, 150, 25));
        this.add(email);

        labelWeb = new JLabel();
        labelWeb.setBounds(new Rectangle(10, 160, 100, 20));
        labelWeb.setText(txt.getMessage("pantAltaCentro.label.web"));
        this.add(labelWeb);

        web = new JTextField(10);
        web.setBounds(new Rectangle(100, 160, 200, 25));
        this.add(web);

        labelTelefono = new JLabel();
        labelTelefono.setBounds(new Rectangle(350, 130, 100, 20));
        labelTelefono.setText(txt.getMessage("pantAltaCentro.label.telefono"));
        this.add(labelTelefono);

        telefono = new JTextField(10);
        telefono.setBounds(new Rectangle(420, 130, 150, 25));
        this.add(telefono);


        labelUniversidad = new JLabel();
        labelUniversidad.setBounds(new Rectangle(10, 10, 100, 20));
        labelUniversidad.setText(txt.getMessage("pantAltaCentro.label.universidad"));
        this.add(labelUniversidad);

        if (!bAlta.booleanValue()) {
            labelMotivo = new JLabel();
            labelMotivo.setBounds(new Rectangle(10, 190, 100, 20));
            labelMotivo.setText(txt.getMessage("pantAltaCentro.label.motivo"));
            this.add(labelMotivo);

            labelFechaBaja = new JLabel();
            labelFechaBaja.setBounds(new Rectangle(350, 190, 100, 20));
            labelFechaBaja.setText(txt.getMessage("pantAltaCentro.label.fechaBaja"));
            this.add(labelFechaBaja);

            motivo = new JTextField(10);
            motivo.setBounds(new Rectangle(100, 190, 200, 25));
            this.add(motivo);

            fechaBaja = new JTextField(10);
            fechaBaja.setBounds(new Rectangle(420, 190, 100, 25));
            this.add(fechaBaja);
            rellenarCampos(idCentroEditar);
        }

    }

    private JButton getBotonAceptar() {
        if (botonAceptar == null) {
            botonAceptar = new JButton();
            botonAceptar.setBounds(new Rectangle(290, 290, 100, 30));
            botonAceptar.setText(txt.getMessage("pantAltaCentro.aceptar"));
            botonAceptar.addActionListener(new java.awt.event.ActionListener() {

                public void actionPerformed(java.awt.event.ActionEvent e) {

                    if (bAlta.booleanValue()) {
                        boolean altaOK = AltaCentro();
                    } else {
                        editarCentro(centroEditar);
                    }

                }
            });
        }
        return botonAceptar;
    }

    private JComboBox getComboUniversidad() {

        if (comboUniversidad == null) {
            comboUniversidad = new JComboBox();
            Vector<MostrarCombo> vUniversidad = null;
            try {
                vUniversidad = objServeis.listaUniversidades();
                comboUniversidad = new JComboBox(vUniversidad);
                comboUniversidad.setBounds(new Rectangle(100, 10, 250, 25));
               
            } catch (Exception eRe) {
                JOptionPane.showMessageDialog(null,
                        txt.getMessage("pantAltaCentro.error.remoto") + "\n" + eRe.getMessage(),
                        txt.getMessage("pantAltaCentro.error"), JOptionPane.ERROR_MESSAGE);

            }

        }
        return comboUniversidad;
    }

    private JComboBox getComboPais() {

        if (comboPais == null) {
            comboPais = new JComboBox();
            Vector<MostrarCombo> vPais = null;
            try {
                vPais = objServeis.listaPaises();
                comboPais = new JComboBox(vPais);
                comboPais.setBounds(new Rectangle(100, 130, 200, 25));
            } catch (Exception eRe) {
                JOptionPane.showMessageDialog(null,
                        txt.getMessage("pantAltaCentro.error.remoto") + "\n" + eRe.getMessage(),
                        txt.getMessage("pantAltaCentro.error"), JOptionPane.ERROR_MESSAGE);

            }
        }
        return comboPais;
    }

    protected boolean AltaCentro() {

        Integer idUniversidad = ((MostrarCombo) comboUniversidad.getSelectedItem()).getID();
        Integer idPais = ((MostrarCombo) comboPais.getSelectedItem()).getID();

        boolean validarOK = validarAltaCentro();

        if (validarOK) {
            try {

                Integer idContacto = objServeis.altaContacto(direccion.getText(), Integer.valueOf(CP.getText()), localidad.getText(),
                        idPais, email.getText(), web.getText(), telefono.getText());

                objServeis.altaCentro(nombre.getText(), idUniversidad, idContacto);

                JOptionPane.showMessageDialog(null,
                        txt.getMessage("pantAltaCentro.guardar.ok") + "\n",
                        txt.getMessage("pantAltaCentro.error"), JOptionPane.INFORMATION_MESSAGE);

                PantallaAltaCentroDocente.this.setVisible(false);

            } catch (Exception e) {
                JOptionPane.showMessageDialog(null,
                        txt.getMessage("pantAlta.error.nok") + "\n" + e.getMessage(),
                        txt.getMessage("pantAlta.error"), JOptionPane.ERROR_MESSAGE);
                return false;
            }
        }
        return true;
    }

    protected boolean validarAltaCentro() {

        Integer idUniversidad = ((MostrarCombo) comboUniversidad.getSelectedItem()).getID();

        if (idUniversidad ==0){
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("pantAltaCentro.guardar.universidadNull"),
                    txt.getMessage("pantAltaCentro.guardar"), JOptionPane.ERROR_MESSAGE);
            return false;
        }
        if (Utils.isEmpty(nombre.getText())) {
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("pantAltaCentro.guardar.nombreNull"),
                    txt.getMessage("pantAltaCentro.guardar"), JOptionPane.ERROR_MESSAGE);
            return false;
        } else if (nombre.getText().length() > 50) {
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("pantAltaCentro.guardar.nombreFormato"),
                    txt.getMessage("pantAltaCentro.guardar"), JOptionPane.ERROR_MESSAGE);
            return false;
        }

        if (Utils.isEmpty(direccion.getText())) {
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("pantAltaCentro.guardar.direccionNull"),
                    txt.getMessage("pantAltaCentro.guardar"), JOptionPane.ERROR_MESSAGE);
            return false;
        } else if (direccion.getText().length() > 50) {
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("pantAltaCentro.guardar.direccionFormato"),
                    txt.getMessage("pantAltaCentro.guardar"), JOptionPane.ERROR_MESSAGE);
            return false;
        }

        if (Utils.isEmpty(localidad.getText())) {
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("pantAltaCentro.guardar.localidadNull"),
                    txt.getMessage("pantAltaCentro.guardar"), JOptionPane.ERROR_MESSAGE);
            return false;
        } else if (localidad.getText().length() > 50) {
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("pantAltaCentro.guardar.localidadFormato"),
                    txt.getMessage("pantAltaCentro.guardar"), JOptionPane.ERROR_MESSAGE);
            return false;
        }


        if (Utils.isEmpty(CP.getText())) {
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("pantAltaCentro.guardar.CPNull"),
                    txt.getMessage("pantAltaCentro.guardar"), JOptionPane.ERROR_MESSAGE);
            return false;
        } else if (CP.getText().length() > 10) {
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("pantAltaCentro.guardar.CPFormato"),
                    txt.getMessage("pantAltaCentro.guardar"), JOptionPane.ERROR_MESSAGE);
            return false;
        } else {
            try {
                new Integer(CP.getText());
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null,
                        txt.getMessage("pantAltaCentro.guardar.CPFormato"),
                        txt.getMessage("pantAltaCentro.guardar"), JOptionPane.ERROR_MESSAGE);
                return false;
            }
        }


        if (Utils.isEmpty(telefono.getText())) {
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("pantAltaCentro.guardar.telefonoNull"),
                    txt.getMessage("pantAltaCentro.guardar"), JOptionPane.ERROR_MESSAGE);
            return false;
        } else if (telefono.getText().length() > 10) {
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("pantAltaCentro.guardar.telefonoFormato"),
                    txt.getMessage("pantAltaCentro.guardar"), JOptionPane.ERROR_MESSAGE);
            return false;
        }

        if (Utils.isEmpty(web.getText())) {
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("pantAltaCentro.guardar.webNull"),
                    txt.getMessage("pantAltaCentro.guardar"), JOptionPane.ERROR_MESSAGE);
            return false;
        } else if (web.getText().length() > 500) {
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("pantAltaCentro.guardar.webFormato"),
                    txt.getMessage("pantAltaCentro.guardar"), JOptionPane.ERROR_MESSAGE);
            return false;
        }


        if (Utils.isEmpty(email.getText())) {
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("pantAltaCentro.guardar.emailNull"),
                    txt.getMessage("pantAltaCentro.guardar"), JOptionPane.ERROR_MESSAGE);
            return false;
        } else if (email.getText().length() > 30) {
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("pantAltaCentro.guardar.emailFormato"),
                    txt.getMessage("pantAltaCentro.guardar"), JOptionPane.ERROR_MESSAGE);
            return false;
        }

 
        if (!bAlta.booleanValue()) {
            if ((Utils.isEmpty(motivo.getText()) && !Utils.isEmpty(fechaBaja.getText()))
                    || (!Utils.isEmpty(motivo.getText()) && Utils.isEmpty(fechaBaja.getText()))) {
                JOptionPane.showMessageDialog(null,
                        txt.getMessage("pantAltaCentro.guardar.baja"),
                        txt.getMessage("pantAltaCentro.guardar"), JOptionPane.ERROR_MESSAGE);
                return false;
            }else{
                if (!Utils.isEmpty(motivo.getText()) && !Utils.isEmpty(fechaBaja.getText())){
                    estado=1;
                }
            }

            if (!Utils.isEmpty(fechaBaja.getText())) {
                try {
                    
                    sdf.setLenient(false);
                    sdf.parse(fechaBaja.getText());

                } catch (Exception e) {
                    JOptionPane.showMessageDialog(null,
                            txt.getMessage("pantAltaCentro.guardar.fechaFormato") + "\n" + e.getMessage(),
                            txt.getMessage("pantAlta.guardar"), JOptionPane.ERROR_MESSAGE);
                    return false;
                }

            }

        }


        return true;
    }

    private void rellenarCampos(Integer idCentro) {
       Vector<MostrarCombo> vU = new Vector<MostrarCombo>();
       Vector<MostrarCombo> vP = new Vector<MostrarCombo>();


        try {

            centroEditar = objServeis.getCentroDocente(idCentro);
            nombre.setText(centroEditar.getNombre());
            direccion.setText(centroEditar.getContacto().getDomicilio());
            telefono.setText(centroEditar.getContacto().getTelefono());
            web.setText(centroEditar.getContacto().getWeb());
            email.setText(centroEditar.getContacto().getEmail());
            localidad.setText(centroEditar.getContacto().getLocalidad());
            CP.setText(centroEditar.getContacto().getCp().toString());

            MostrarCombo universidad=new MostrarCombo(centroEditar.getUniversidad().getIdUniversidad(), centroEditar.getUniversidad().getNombre());
            comboUniversidad.getModel().setSelectedItem(universidad);

            MostrarCombo pais=new MostrarCombo(centroEditar.getContacto().getPais().getIdPais(), centroEditar.getContacto().getPais().getDescripcion());
            comboPais.getModel().setSelectedItem(pais);
            
            motivo.setText(centroEditar.getMotivoEstado());
            fechaBaja.setText(!Utils.isEmpty(centroEditar.getFechaEstado()) ? sdf.format(centroEditar.getFechaEstado()) : null);



        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("pantAlta.error.nok") + "\n" + e.getMessage(),
                    txt.getMessage("pantAlta.error"), JOptionPane.ERROR_MESSAGE);
        }

    }

    protected boolean editarCentro(CentroDocente centro) {

        Integer idUniversidad = ((MostrarCombo) comboUniversidad.getSelectedItem()).getID();
        Integer idPais = ((MostrarCombo) comboPais.getSelectedItem()).getID();

        boolean validarOK = validarAltaCentro();
        
        if (validarOK) {
            try {
                objServeis.editarContacto(centro.getContacto(), direccion.getText(), Integer.valueOf(CP.getText()), localidad.getText(),
                        idPais, email.getText(), web.getText(), telefono.getText());

                objServeis.editarCentro(centro.getIdCentroDocente(), nombre.getText(), idUniversidad, centro.getContacto().getIdContacto(),
                        estado, motivo.getText(), fechaBaja.getText());

                JOptionPane.showMessageDialog(null,
                        txt.getMessage("pantAltaCentro.guardar.ok") + "\n",
                        txt.getMessage("pantAltaCentro.error"), JOptionPane.INFORMATION_MESSAGE);

                PantallaAltaCentroDocente.this.setVisible(false);

            } catch (Exception e) {
                JOptionPane.showMessageDialog(null,
                        txt.getMessage("pantAlta.error.nok") + "\n" + e.getMessage(),
                        txt.getMessage("pantAlta.error"), JOptionPane.ERROR_MESSAGE);
                return false;
            }
        }
        return true;
    }
}
